Q ভাষায় লিস্ট এবং ডিকশনারি দুটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার, যা ডেটা সংগঠিত এবং ম্যানিপুলেট করতে ব্যবহৃত হয়। এগুলি সাধারণত ডেটার দ্রুত অ্যাক্সেস, সংরক্ষণ এবং প্রক্রিয়াকরণের জন্য খুবই উপযোগী।
১. লিস্ট (Lists)
লিস্ট একটি সাধারণ ডেটা স্ট্রাকচার যা একাধিক উপাদান সংরক্ষণ করে। Q ভাষায় লিস্টগুলি এক ধরনের অর্ডারড সিকোয়েন্স, যেখানে উপাদানগুলির স্থান নির্দিষ্ট থাকে এবং সেগুলি ইনডেক্সের মাধ্যমে অ্যাক্সেস করা যায়। লিস্টে একাধিক ডেটা টাইপের উপাদান থাকতে পারে।
- লিস্ট তৈরি করা
Q ভাষায় একটি লিস্ট তৈরি করতে উপাদানগুলি স্পেস দিয়ে পৃথক করা হয় এবং () দ্বারা ঘেরা থাকে।
উদাহরণ:
lst1: 1 2 3 4 5 / পূর্ণসংখ্যার লিস্ট
lst2: "apple" "banana" "cherry" / স্ট্রিং লিস্ট
lst3: 1.2 3.4 5.6 / ফ্লোট লিস্ট- লিস্টের উপাদান অ্যাক্সেস
লিস্টের একটি নির্দিষ্ট উপাদান অ্যাক্সেস করতে ইনডেক্স ব্যবহার করা হয়। ইনডেক্সিং ১ থেকে শুরু হয়।
উদাহরণ:
lst: 1 2 3 4 5
lst[2] / আউটপুট হবে 2- লিস্টের আকার (Length of List)
লিস্টের আকার বের করার জন্য count ফাংশন ব্যবহার করা হয়।
উদাহরণ:
count lst / আউটপুট হবে 5- লিস্টে নতুন উপাদান যোগ করা
লিস্টে নতুন উপাদান যোগ করতে , ব্যবহার করা হয়।
উদাহরণ:
lst: lst, 6 / আউটপুট হবে 1 2 3 4 5 6- লিস্টের উপাদান আপডেট করা
লিস্টের একটি নির্দিষ্ট উপাদান আপডেট করতে ইনডেক্সের মাধ্যমে নতুন মান অ্যাসাইন করা হয়।
উদাহরণ:
lst[3]: 10 / lst এর তৃতীয় উপাদান এখন 10 হবে২. ডিকশনারি (Dictionaries)
ডিকশনারি একটি ডেটা স্ট্রাকচার যা কী (key) এবং ভ্যালু (value) জোড়া ধারণ করে। এটি এক ধরনের অ্যাসোসিয়েটিভ অ্যারে, যেখানে প্রতিটি কী একটি নির্দিষ্ট ভ্যালুর সাথে যুক্ত থাকে। ডিকশনারি একটি অর্ডারড সংগ্রহ নয়, তাই কী অনুযায়ী ডেটা অ্যাক্সেস করা হয়।
- ডিকশনারি তৈরি করা
Q ভাষায় একটি ডিকশনারি তৈরি করতে, কী এবং ভ্যালু দুটি লিস্ট আকারে রাখা হয় এবং ! অপারেটর ব্যবহার করা হয়।
উদাহরণ:
dict: `name`age`city! ("John" "Jane" "Sam"; 30 25 28; "NewYork" "LA" "Chicago")এখানে, name, age, এবং city হল কী, এবং তাদের সাথে যুক্ত মান হলো "John", 30, এবং "NewYork"।
- ডিকশনারির উপাদান অ্যাক্সেস
ডিকশনারির ভ্যালু অ্যাক্সেস করতে কী ব্যবহার করা হয়।
উদাহরণ:
dict[`name] / আউটপুট হবে "John"
dict[`age] / আউটপুট হবে 30- ডিকশনারিতে নতুন কী-ভ্যালু যোগ করা
নতুন কী-ভ্যালু জোড়া যোগ করতে, ডিকশনারির নামের পরে নতুন কী উল্লেখ করে তার মান অ্যাসাইন করা হয়।
উদাহরণ:
dict[`country]: "USA" / নতুন কী `country এবং তার মান "USA" যোগ করা হয়েছে- ডিকশনারির উপাদান আপডেট করা
ডিকশনারির একটি নির্দিষ্ট ভ্যালু আপডেট করতে কী ব্যবহার করা হয় এবং নতুন মান অ্যাসাইন করা হয়।
উদাহরণ:
dict[`age]: 35 / `age কী-এর মান এখন 35 হবে- ডিকশনারি থেকে কী মুছে ফেলা
ডিকশনারি থেকে একটি কী এবং তার সম্পর্কিত ভ্যালু মুছে ফেলতে, delete ফাংশন ব্যবহার করা হয়।
উদাহরণ:
delete dict[`city] / `city কী এবং তার মান মুছে ফেলা হবে- ডিকশনারি আকার
ডিকশনারির মধ্যে কতগুলি কী রয়েছে, তা জানতে count ফাংশন ব্যবহার করা হয়।
উদাহরণ:
count dict / আউটপুট হবে 3 (যেহেতু তিনটি কী আছে)৩. লিস্ট এবং ডিকশনারি এর তুলনা
| বৈশিষ্ট্য | লিস্ট (List) | ডিকশনারি (Dictionary) |
|---|---|---|
| স্ট্রাকচার | এক ধরনের অর্ডারড সিকোয়েন্স | কী-ভ্যালু পেয়ার যা অ্যাসোসিয়েটিভ অ্যারে হিসেবে কাজ করে |
| অ্যাক্সেসিং | ইনডেক্সের মাধ্যমে (0-based index) | কী ব্যবহার করে |
| উপাদান টাইপ | একই ধরনের উপাদান থাকতে পারে | বিভিন্ন ধরনের মান থাকতে পারে (কী-ভ্যালু জোড়া) |
| উপাদান আপডেট | ইনডেক্স দিয়ে সরাসরি আপডেট করা যায় | কী ব্যবহার করে মান পরিবর্তন করা যায় |
| নতুন উপাদান যোগ করা | , অপারেটর দিয়ে | কী দিয়ে মান অ্যাসাইন করা হয় |
সারসংক্ষেপ
লিস্ট এবং ডিকশনারি Q ভাষার গুরুত্বপূর্ণ ডেটা স্ট্রাকচার। লিস্টে এক ধরনের অর্ডারড সিকোয়েন্স থাকে এবং এতে একাধিক উপাদান রাখা যায়, যা ইনডেক্স দিয়ে অ্যাক্সেস করা হয়। অন্যদিকে, ডিকশনারি কী-ভ্যালু পেয়ার ধারণ করে, যেখানে প্রতিটি কী একটি নির্দিষ্ট মানের সাথে যুক্ত থাকে। এগুলি ডেটার দ্রুত অ্যাক্সেস, সংরক্ষণ এবং ম্যানিপুলেশন করতে সাহায্য করে এবং Q ভাষার ডেটা প্রক্রিয়াকরণের জন্য অত্যন্ত কার্যকর।
Q ভাষায় Lists হল এক ধরনের ডেটা স্ট্রাকচার যা একাধিক মান ধারণ করতে পারে। এটি একটি অর্ডারড সংগ্রহ যা প্রাথমিকভাবে গাণিতিক বা টেক্সট ডেটার সাথে কাজ করার জন্য ব্যবহৃত হয়। Q ভাষায় Lists তৈরি করা এবং ম্যানিপুলেট করা খুবই সহজ এবং এতে বিভিন্ন ধরনের কার্যক্রম করা যায়, যেমন যোগ করা, মুছে ফেলা, সংশোধন করা, ফিল্টারিং ইত্যাদি।
১. Lists এর ডিক্লারেশন (Declaration)
Q ভাষায় Lists তৈরি করার জন্য একটি সাধারণ সিনট্যাক্স ব্যবহার করা হয়, যেখানে বিভিন্ন ধরনের ডেটা (integer, float, string) একত্রিত করা যায়। Lists সাধারণত এক বা একাধিক উপাদান ধারণ করে।
উদাহরণ:
a: 1 2 3 4 5 / একটি ইনটিজার লিস্ট
b: 3.14 2.71 1.61 / একটি ফ্লোট লিস্ট
c: "apple" "banana" "cherry" / একটি স্ট্রিং লিস্টএখানে, a একটি ইনটিজার লিস্ট, b একটি ফ্লোট লিস্ট, এবং c একটি স্ট্রিং লিস্ট। আপনি চাইলে বিভিন্ন ধরনের ডেটা একত্রিত করতে পারেন।
২. Lists এর ম্যানিপুলেশন (Manipulation)
Q ভাষায় Lists এর ওপর বিভিন্ন ধরনের অপারেশন বা ম্যানিপুলেশন করা যায়। এর মধ্যে যোগ করা, অপসারণ, ফিল্টারিং, এবং একাধিক মৌলিক কার্যক্রম অন্তর্ভুক্ত রয়েছে।
২.১. এলিমেন্ট অ্যাক্সেস (Element Access)
লিস্টের কোনো নির্দিষ্ট উপাদান অ্যাক্সেস করতে আপনি ইনডেক্স ব্যবহার করতে পারেন। ইনডেক্সিং শুরু হয় ০ থেকে।
a: 1 2 3 4 5
element: a 2 / এলিমেন্ট ৩, কারণ ইনডেক্স ২ হল ৩এখানে a 2 মানে হল a লিস্টের তৃতীয় উপাদান (ইনডেক্স ২) এক্সেস করা, যা ৩।
২.২. লিস্টে নতুন উপাদান যোগ করা (Appending)
লিস্টে নতুন উপাদান যোগ করতে , (comma) অপারেটর ব্যবহার করা হয়।
a: 1 2 3 4 5
a: a, 6 7 / নতুন মান ৬ এবং ৭ যোগ করাএখানে, a লিস্টে নতুন উপাদান ৬ এবং ৭ যোগ করা হয়েছে।
২.৩. লিস্ট থেকে উপাদান মুছে ফেলা (Removing Elements)
একটি উপাদান লিস্ট থেকে মুছে ফেলার জন্য except বা delete ব্যবহার করা হয়।
a: 1 2 3 4 5
a: a except 3 / ৩ মুছে ফেলা হলোএখানে a except 3 মানে হল ৩ উপাদানটি a লিস্ট থেকে মুছে ফেলা।
২.৪. লিস্টে উপাদান আপডেট (Updating Elements)
লিস্টে একটি নির্দিষ্ট উপাদান পরিবর্তন করতে আপনি সরাসরি ইনডেক্স ব্যবহার করতে পারেন।
a: 1 2 3 4 5
a 2: 10 / ইনডেক্স ২ এর মান ১০ করা হলএখানে, a 2: 10 মানে ইনডেক্স ২ এর মান পরিবর্তন করে ১০ করা হয়েছে।
২.৫. লিস্টের আকার পাওয়া (Getting the Length of a List)
লিস্টের উপাদানের সংখ্যা বা আকার পেতে count ফাংশন ব্যবহার করা হয়।
a: 1 2 3 4 5
length: count a / ফলাফল: 5এখানে, count a হল লিস্ট a এর মোট উপাদানের সংখ্যা।
২.৬. লিস্টের উপাদানগুলি একসাথে যোগ করা (Summing the Elements)
লিস্টের সব উপাদান যোগ করতে sum ফাংশন ব্যবহার করা হয়।
a: 1 2 3 4 5
total: sum a / ফলাফল: 15এখানে, sum a লিস্টের সব উপাদান যোগ করে মোট ১৫ প্রদান করবে।
২.৭. ফিল্টারিং (Filtering)
লিস্টের উপাদানগুলির মধ্যে শর্ত দিয়ে ফিল্টার করা যায়। যেমন, শুধুমাত্র একটি নির্দিষ্ট শর্ত পূর্ণ করা উপাদানগুলো নির্বাচন করা।
a: 1 2 3 4 5
filtered: a where a > 2 / ফলাফল: 3 4 5এখানে, a where a > 2 লিস্ট a এর মধ্যে ২ এর বড় মানগুলি ফিল্টার করে।
২.৮. ম্যাপিং (Mapping)
লিস্টের প্রতিটি উপাদানের উপর কোন একটি ফাংশন প্রয়োগ করতে each ব্যবহার করা হয়।
a: 1 2 3 4 5
mapped: each (x * 2) a / ফলাফল: 2 4 6 8 10এখানে, each (x * 2) a মানে হল লিস্টের প্রতিটি উপাদানের উপর গুণফল ২ করা।
৩. মাল্টিডাইমেনশনাল লিস্ট (Multidimensional Lists)
Q ভাষায় আপনি মাল্টিডাইমেনশনাল লিস্টও তৈরি করতে পারেন। এটি এমন একটি লিস্ট যেখানে প্রতিটি উপাদানও নিজে একটি লিস্ট হতে পারে।
উদাহরণ:
matrix: (1 2 3; 4 5 6; 7 8 9) / একটি ৩x৩ ম্যাট্রিক্সএখানে, matrix একটি ৩x৩ আকারের ২-ডাইমেনশনাল লিস্ট।
আপনি প্রতিটি উপাদান অ্যাক্সেস করতে পারেন:
element: matrix 1 2 / ফলাফল: 6এখানে, matrix 1 2 হল দ্বিতীয় রো এবং তৃতীয় কলামের মান, যা ৬।
সারসংক্ষেপ
Q ভাষায় Lists এর মাধ্যমে আপনি একাধিক উপাদান পরিচালনা এবং ম্যানিপুলেট করতে পারেন। বিভিন্ন ধরনের অপারেশন যেমন যোগ, মুছে ফেলা, ফিল্টারিং, আপডেটিং এবং ম্যাপিং সহ আরও অনেক কাজ করা যায়। Lists এর মাধ্যমে ডেটার কার্যকরী বিশ্লেষণ এবং প্রক্রিয়াকরণ সহজ হয়, এবং মাল্টিডাইমেনশনাল লিস্টের মাধ্যমে জটিল ডেটা স্ট্রাকচারও তৈরি করা যায়।
Anonymous Functions এবং Lambda Expressions হল ফাংশনাল প্রোগ্রামিংয়ের গুরুত্বপূর্ণ অংশ, যা একাধিক ডেটা প্রক্রিয়াকরণের জন্য শক্তিশালী টুলস হিসেবে কাজ করে। Q ভাষায়, Anonymous Functions বা Lambda Functions ব্যবহৃত হয় এমন ফাংশন তৈরি করার জন্য যেগুলো কোনও নাম ছাড়াই একবারের জন্য ব্যবহৃত হয়। এগুলি সাধারণত ছোট ফাংশন তৈরিতে ব্যবহৃত হয় যেখানে ফাংশনের নাম রাখা প্রয়োজন হয় না।
১. Anonymous Functions (এনোনিমাস ফাংশন)
Anonymous functions হল এমন ফাংশন যা কোনো নাম ছাড়াই সরাসরি কোডে ডিফাইন করা হয় এবং সাধারণত একটি এক্সপ্রেশন হিসেবে ব্যবহৃত হয়। Q ভাষায় এটি {} (ক্রলে ব্রেস) দ্বারা চিহ্নিত করা হয়। এগুলি খুবই ছোট এবং সাধারণ ফাংশন তৈরিতে সহায়ক।
Example: Anonymous Function
add: {x + y} / একটি নামবিহীন ফাংশন যা x এবং y যোগ করবে
add 3 5 / আউটপুট: 8এখানে {x + y} হল একটি অ্যানোনিমাস ফাংশন, যেটি x এবং y এর যোগফল দেয়। এটি add নামের ভেরিয়েবলের মধ্যে স্টোর করা হয়েছে।
২. Lambda Expressions (ল্যাম্বডা এক্সপ্রেশন)
Lambda Expressions হল আরও একটি ধরনের অ্যানোনিমাস ফাংশন, যেগুলি সাধারণত এক লাইনে ফাংশন তৈরি করতে ব্যবহৃত হয়। এটি বিশেষভাবে ফাংশনাল প্রোগ্রামিং ভাষায় ব্যবহৃত হয়।
Q তে Lambda Expressions ব্যবহার করার সময় {} (ক্রলে ব্রেস) ব্যবহার করা হয় এবং এর মধ্যে ফাংশনল ফাংশনের কোড থাকে।
Example: Lambda Expression
square: {x * x} / একটি Lambda Expression যা x এর বর্গ দেয়
square 4 / আউটপুট: 16এখানে {x * x} হল একটি ল্যাম্বডা এক্সপ্রেশন যা একটি সংখ্যা x এর বর্গ বের করে। আপনি ল্যাম্বডা এক্সপ্রেশনটি সরাসরি ফাংশন হিসেবে ব্যবহার করতে পারেন।
৩. Lambda Expressions এবং Higher-Order Functions
Q ভাষায় ল্যাম্বডা এক্সপ্রেশন বিশেষভাবে Higher-Order Functions (যেগুলি অন্যান্য ফাংশন গ্রহণ করে বা ফিরিয়ে দেয়) তৈরি করতে ব্যবহৃত হয়। আপনি ল্যাম্বডা এক্সপ্রেশন ব্যবহার করে ফাংশনকে আরও সাধারণ ও শক্তিশালীভাবে ব্যবহার করতে পারেন।
Example: Higher-Order Function with Lambda Expression
mapSquares: {x each x * x} / mapSquares একটি হাইয়ার-অর্ডার ফাংশন
mapSquares 1 2 3 4 / আউটপুট: 1 4 9 16এখানে mapSquares একটি হাইয়ার-অর্ডার ফাংশন যা তালিকার প্রতিটি উপাদানের বর্গ বের করে, এবং এটি ল্যাম্বডা এক্সপ্রেশন {x * x} ব্যবহার করে।
৪. Anonymous Functions এবং Lambda Expressions ব্যবহার
Anonymous Functions এবং Lambda Expressions যখন একসঙ্গে ব্যবহার করা হয়, তখন এটি ফাংশনাল প্রোগ্রামিংয়ের শক্তিশালী অংশ হয়ে দাঁড়ায়। নিচে একটি উদাহরণ দেওয়া হল যেখানে দুইটি ফাংশন একত্রে ব্যবহার করা হয়েছে:
Example: Combining Anonymous Functions and Lambda Expressions
filterEven: {x each x mod 2 = 0} / একটি ফিল্টার ফাংশন যা শুধু পার্শ্বিক সংখ্যাগুলিকে বাছাই করে
filterEven 1 2 3 4 5 6 / আউটপুট: 2 4 6এখানে filterEven একটি ফাংশন যা প্রতিটি উপাদানের মধ্যে একে একে যাচাই করে কোনটি ইভেন (পার্শ্বিক) সংখ্যা এবং তা বেছে নেয়। {x mod 2 = 0} হল একটি ল্যাম্বডা এক্সপ্রেশন যা ইভেন সংখ্যাগুলিকে চেক করে।
৫. Anonymous Functions এবং Lambda Expressions এর সুবিধা
- সংক্ষিপ্ততা: Anonymous Functions এবং Lambda Expressions কোড সংক্ষিপ্ত ও সহজ করে তোলে, বিশেষ করে যখন ফাংশনগুলি একবারের জন্য ব্যবহৃত হয়।
- ফাংশনাল প্রোগ্রামিং সুবিধা: ফাংশনাল প্রোগ্রামিংয়ের মত ফিচার যেমন higher-order functions, map, filter, ইত্যাদি তৈরি করতে সাহায্য করে।
- ফাংশনের মধ্যে পাস করা: আপনি Anonymous Functions বা Lambda Expressions অন্য ফাংশনে পাস করতে পারেন, যেগুলি সাধারণভাবে নির্দিষ্ট কাজের জন্য ডিজাইন করা হয়।
- সহজ ডেটা ম্যানিপুলেশন: এই ফাংশনগুলো ডেটা ম্যানিপুলেশন করতে সুবিধাজনক, যেমন লিস্ট বা টেবিলের সাথে কাজ করা।
সারসংক্ষেপ
Anonymous Functions এবং Lambda Expressions হল শক্তিশালী টুলস যা Q ভাষায় ফাংশনাল প্রোগ্রামিংকে সহজ এবং কার্যকর করে তোলে। এগুলি ছোট এবং সংক্ষিপ্ত ফাংশন তৈরিতে ব্যবহার হয়, যেখানে কোনও নামের প্রয়োজন হয় না, এবং এটি সাধারণত এক্সপ্রেশন হিসেবে ব্যবহৃত হয়। Q তে ল্যাম্বডা এক্সপ্রেশন ব্যবহার করে আপনি দ্রুত এবং দক্ষভাবে ডেটা ম্যানিপুলেশন, কুইরি, এবং ফাংশনাল প্রোগ্রামিং করতে পারবেন।
Dictionaries KDB+ (Q ভাষা) তে একটি শক্তিশালী ডেটা স্ট্রাকচার, যা কী-ভ্যালু পেয়ার (key-value pairs) ধারণ করে। এটি একটি অত্যন্ত কার্যকরী ডেটা টাইপ, বিশেষত যখন আপনাকে ডেটাকে একটি নির্দিষ্ট কী দ্বারা সংরক্ষণ এবং অ্যাক্সেস করতে হয়। KDB+ এ ডিকশনারি ব্যবহার করে ডেটার মানগুলির দ্রুত অ্যাক্সেস এবং হ্যান্ডলিং করা যায়।
এখানে Dictionaries এর ডিক্লারেশন এবং ডেটা ম্যাপিং এর বিস্তারিত আলোচনা করা হলো।
১. Dictionaries এর ডিক্লারেশন
KDB+ এ ডিকশনারি ডিক্লেয়ার করার জন্য ! অপারেটর ব্যবহৃত হয়। এখানে কী (key) এবং ভ্যালু (value) আলাদা আলাদা তালিকায় থাকা উচিত।
উদাহরণ:
dict: `apple`banana`cherry ! 100 200 300এখানে:
apple,banana,cherryহল কী (keys), যেগুলি সিম্বল টাইপে (symbols) এবং- 100, 200, 300 হল তাদের মান (values), যেগুলি ইনটিজার (integer) টাইপের।
এই ডিকশনারিতে apple কীটির মান হবে ১০০, banana কীটির মান হবে ২০০ এবং cherry কীটির মান হবে ৩০০।
একটি ভিন্ন ডেটা টাইপের মান:
dict2: `name`age! ("Alice"; 30)এখানে name এর মান হবে স্ট্রিং "Alice" এবং age এর মান হবে ইনটিজার 30।
২. Data Mapping (ডেটা ম্যাপিং)
ডেটা ম্যাপিং বলতে বোঝানো হয় কিভাবে একটি ডেটার সেটকে একটি কী-ভ্যালু পেয়ার হিসেবে ম্যাপ করা যায়। KDB+ তে Dictionaries ডেটা ম্যাপিং এর জন্য অত্যন্ত উপযোগী।
উদাহরণ ১: একাধিক কী-ভ্যালু পেয়ার
fruitPrices: `apple`banana`cherry ! 100 200 300এখানে, আপনি fruitPrices ডিকশনারির মাধ্যমে বিভিন্ন ফলের দাম স্টোর করেছেন। এখন, আপনি এই ডিকশনারির মাধ্যমে যেকোনো ফলের দাম খুব দ্রুত অ্যাক্সেস করতে পারেন।
ডেটা অ্যাক্সেস:
fruitPrices`apple / আউটপুট হবে 100
fruitPrices`banana / আউটপুট হবে 200এখানে fruitPrices ডিকশনারি থেকে apple এবং banana এর মান অ্যাক্সেস করা হয়েছে।
উদাহরণ ২: ভিন্ন ডেটা টাইপের ডেটা ম্যাপিং
আপনি বিভিন্ন ডেটা টাইপের মানও ডিকশনারির মধ্যে রাখতে পারেন। যেমন:
employeeInfo: `name`age`salary ! ("John"; 28; 50000)এখানে, employeeInfo ডিকশনারি তৈরির মাধ্যমে একজন কর্মীর নাম, বয়স এবং বেতন সংরক্ষণ করা হয়েছে।
ডেটা অ্যাক্সেস:
employeeInfo`name / আউটপুট হবে "John"
employeeInfo`age / আউটপুট হবে 28
employeeInfo`salary / আউটপুট হবে 50000৩. Dictionaries এ ডেটা আপডেট করা
KDB+ তে ডিকশনারির মান আপডেট করতে আপনি সরাসরি কী-ভ্যালু পেয়ার সেট করতে পারেন।
উদাহরণ: একটি কী-ভ্যালু আপডেট করা
fruitPrices`apple: 150 / "apple" এর দাম 150 করাএখানে, apple এর দাম ১০০ থেকে ১৫০ হয়ে যাবে। অন্য যে কোনো কী-ভ্যালু পেয়ারও আপডেট করা যায় একইভাবে।
উদাহরণ ২: নতুন কী-ভ্যালু যোগ করা
fruitPrices`orange: 250 / নতুন কী-ভ্যালু যোগ করাএটি fruitPrices ডিকশনারিতে orange কী-এর জন্য একটি নতুন মান (২৫০) যোগ করবে।
৪. Dictionaries এ Loop বা Iteration (পুনরাবৃত্তি)
ডিকশনারির মধ্যে এক্সপ্রেশন বা লুপ চালাতে হলে, আপনি each অপারেটর ব্যবহার করতে পারেন।
উদাহরণ: ডিকশনারির মানগুলির উপর পুনরাবৃত্তি করা
prices: fruitPrices each fruitPrices / ডিকশনারির প্রতিটি মানের উপর কাজ করাএখানে, fruitPrices each fruitPrices ডিকশনারির প্রতিটি মানের উপর ফাংশন বা অপারেশন প্রয়োগ করবে।
৫. Dictionaries এর সাথে ফাংশন ব্যবহার
ফাংশনের মাধ্যমে ডিকশনারি তৈরি করা এবং তার সাথে কাজ করা যেতে পারে।
উদাহরণ: ডিকশনারি এবং ফাংশন ব্যবহার
getPrice: {fruitPrices[x]} / একটি ফাংশন যা ডিকশনারি থেকে মূল্য ফেরত দিবে
getPrice `apple / আউটপুট হবে 150এখানে, getPrice ফাংশনটি একটি কী হিসাবে apple ইনপুট নেবে এবং fruitPrices ডিকশনারি থেকে তার মান (দাম) রিটার্ন করবে।
সারসংক্ষেপ
- Dictionaries KDB+ তে কী-ভ্যালু পেয়ার (key-value pairs) ধারণ করে এবং ডেটা সঞ্চয় এবং অ্যাক্সেসের জন্য খুবই কার্যকরী।
- Data Mapping হল কী-ভ্যালু পেয়ার ব্যবহার করে ডেটা সংরক্ষণ এবং মান অ্যাক্সেস করা।
- ডিকশনারির মাধ্যমে বিভিন্ন ডেটা টাইপের মান, ফাংশন ব্যবহার করে ডেটা অ্যাক্সেস এবং ডেটা আপডেট করা সম্ভব।
- ডিকশনারির উপর iteration করতে
eachঅপারেটর ব্যবহার করা হয়, যা ডিকশনারির মানগুলোর উপর এক্সপ্রেশন বা ফাংশন প্রয়োগ করতে সাহায্য করে।
এই ধারণাগুলি KDB+ এ ডেটা পরিচালনার জন্য খুবই শক্তিশালী এবং কার্যকরী উপায়।
Nested Lists এবং Dictionaries ডেটা স্ট্রাকচার হল এমন একটি গুরুত্বপূর্ণ ধারণা যা ডেটার সংগঠন এবং সংগঠিত ডেটা প্রক্রিয়াকরণকে আরও নমনীয় এবং শক্তিশালী করে তোলে। প্রোগ্রামিং ভাষার মধ্যে Q ভাষাও এই ধরনের ডেটা স্ট্রাকচারকে সমর্থন করে এবং এটি বিশেষভাবে টাইম-সিরিজ ডেটা, ডেটা বিশ্লেষণ এবং জটিল ডেটা ম্যানিপুলেশনে ব্যবহার করা হয়।
১. Nested Lists (নেস্টেড লিস্ট)
Nested Lists হল এমন একটি ডেটা স্ট্রাকচার যেখানে একটি লিস্টের মধ্যে অন্য লিস্ট থাকে। এটি ডেটাকে একটি স্তরের মধ্যে অ্যারে বা লিস্টের ভিতরে আরো ডেটা স্টোর করার সুবিধা দেয়।
Q ভাষায় Nested Lists এর ব্যবহার:
nestedList: (1 2 3; 4 5 6; 7 8 9) / একটি নেস্টেড লিস্ট যেখানে প্রতিটি উপাদানে আরেকটি লিস্ট আছেএখানে, nestedList একটি লিস্ট, যার মধ্যে তিনটি ভিন্ন ভিন্ন লিস্ট রয়েছে, অর্থাৎ প্রতিটি উপাদান নিজেই একটি লিস্ট। এখন যদি আপনি এই nested list-এর উপাদান অ্যাক্সেস করতে চান:
nestedList 0 / আউটপুট: 1 2 3
nestedList 1 / আউটপুট: 4 5 6
nestedList 2 / আউটপুট: 7 8 9এখানে nestedList 0 প্রথম লিস্টটি রিটার্ন করে, nestedList 1 দ্বিতীয় লিস্ট এবং nestedList 2 তৃতীয় লিস্ট রিটার্ন করে।
Nested Lists এর আরও ব্যবহার:
- ডেটা হ্যান্ডলিং:
Nested Lists বড় ডেটাসেট বা মাল্টি-ডাইমেনশনাল ডেটা (যেমন ম্যাট্রিক্স বা টেবিল) সঞ্চয় করার জন্য কার্যকরী। - ডেটা অ্যাক্সেস এবং ম্যানিপুলেশন:
Nested Lists-এর সাহায্যে আপনি ডেটার ভিতরে আরও ডেটা অ্যাক্সেস এবং ম্যানিপুলেশন করতে পারেন। উদাহরণস্বরূপ, একটি তালিকায় বহু তালিকা রেখে, প্রতিটি তালিকাতে থাকা উপাদানগুলোর সাথে কাজ করা সম্ভব।
২. Dictionaries (ডিকশনারি)
Dictionaries একটি ডেটা স্ট্রাকচার যেখানে কী (key) এবং ভ্যালু (value) এর মধ্যে সম্পর্ক থাকে। এটি আরও উন্নত এবং দ্রুত ডেটা অ্যাক্সেস এবং ম্যানিপুলেশনের জন্য ব্যবহৃত হয়।
Q ভাষায় Dictionaries এর ব্যবহার:
myDict: `name`age`city!(`John`; 25; `Dhaka)এখানে myDict একটি ডিকশনারি, যার মধ্যে তিনটি কী আছে: name, age, এবং city। তাদের মানগুলি যথাক্রমে John, 25, এবং Dhaka।
Dictionaries-এর অ্যাক্সেস:
myDict `name / আউটপুট: John
myDict `age / আউটপুট: 25
myDict `city / আউটপুট: Dhakaএখানে, আমরা কেবল কী (name, age, city) দিয়ে ভ্যালু (যেমন John, 25, Dhaka) অ্যাক্সেস করেছি। এইভাবে ডিকশনারির মানগুলোর মধ্যে দ্রুত অ্যাক্সেস করা যায়।
Dictionaries এর আরও ব্যবহার:
- ডেটার মধ্যে দ্রুত অ্যাক্সেস:
Dictionaries অত্যন্ত দ্রুত কিওয়ের মান খুঁজে পেতে ব্যবহৃত হয়। বিশেষ করে যখন বড় ডেটাসেট থাকে এবং নির্দিষ্ট কিওয়ের মাধ্যমে ডেটা অনুসন্ধান করতে হয়। - মাল্টি-ডাইমেনশনাল ডেটা স্টোরেজ:
Dictionaries তে সহজেই মাল্টি-ডাইমেনশনাল ডেটা স্টোর করা যায়। আপনি একাধিক কিওয়ের মাধ্যমে বিভিন্ন ভ্যালু সংরক্ষণ করতে পারেন।
৩. Nested Dictionaries (নেস্টেড ডিকশনারি)
Nested Dictionaries হল এমন একটি ডিকশনারি যেখানে একটি কী এর মান একটি আরেকটি ডিকশনারি হতে পারে। এটি ডেটার মধ্যে আরও জটিল সম্পর্ক তৈরি করতে ব্যবহৃত হয়।
Q ভাষায় Nested Dictionaries এর ব্যবহার:
nestedDict: `person1`person2!(`name`age!(`John`; 25); `name`age!(`Jane`; 30))এখানে, nestedDict একটি ডিকশনারি যার মধ্যে person1 এবং person2 কী রয়েছে, এবং প্রতিটির মান হলো একটি আরেকটি ডিকশনারি যা name এবং age কী-ভ্যালু পেয়ার ধারণ করে।
Nested Dictionaries-এর অ্যাক্সেস:
nestedDict `person1`name / আউটপুট: John
nestedDict `person2`age / আউটপুট: 30এখানে, nestedDict person1name আমাদের John প্রদান করেছে, যা person1 এর name কী-এর মান।
Nested Lists এবং Dictionaries এর সুবিধা
- কমপ্লেক্স ডেটা মডেলিং:
Nested Lists এবং Dictionaries ডেটার মধ্যে সম্পর্ক এবং কমপ্লেক্স ডেটা মডেলিং করতে সাহায্য করে। যেমন, একাধিক স্তরের ডেটা মডেল, যেখানে ডেটার মধ্যে আরও ডেটা থাকে। - ডেটা হ্যান্ডলিং:
এগুলি ডেটা প্রসেসিংয়ের ক্ষেত্রে একটি শক্তিশালী টুল, যেখানে মাল্টি-ডাইমেনশনাল ডেটা এবং সম্পর্কিত ডেটা অ্যাক্সেস এবং প্রক্রিয়া করতে সহজ হয়। - গতি এবং পারফর্ম্যান্স:
ডিকশনারি গুলি দ্রুত অ্যাক্সেস এবং প্রক্রিয়াকরণের জন্য অপ্টিমাইজড, বিশেষ করে যখন ডেটা খুব বড় এবং অনেক খুঁজে বের করার কাজ রয়েছে।
সারসংক্ষেপ
- Nested Lists হল একটি লিস্টের মধ্যে অন্য লিস্ট স্টোর করার পদ্ধতি, যা মাল্টি-ডাইমেনশনাল ডেটার জন্য উপযোগী।
- Dictionaries হল কিও-ভ্যালু পেয়ার ডেটা স্ট্রাকচার, যা দ্রুত ডেটা অ্যাক্সেস এবং ম্যানিপুলেশন করার জন্য ব্যবহৃত হয়।
- Nested Dictionaries ডিকশনারির মধ্যে অন্য ডিকশনারি সংরক্ষণ করার পদ্ধতি, যা আরও জটিল ডেটা স্ট্রাকচার তৈরি করতে সহায়তা করে।
Q ভাষায় Nested Lists এবং Dictionaries এর মাধ্যমে বড় এবং জটিল ডেটা সেট খুব সহজে ম্যানেজ এবং প্রক্রিয়া করা সম্ভব।
Read more